package infomap

import grails.converters.JSON
import groovyx.net.http.RESTClient

class MapController {

    def googleClient = new RESTClient("http://maps.google.com/maps/api/geocode/")

    def index = {
        def markers = EventoVial.list().collect { it.toMarkup() }


//        markers << [latitude: -34.57029610000001, longitude: -58.49146160, description: "Mi casa"]
//        markers << [latitude: -34.61762840, longitude: -58.36859740, description: "Facu"]

        [markers: markers]
    }

    def bicisendas = {

    }

    def servicios = {
        [servicios: Servicio.list(params)]
    }

    def msg = {
        String message = params.message
        String tipo = message.trim().substring(0, message.indexOf(" "))

        println "MEnsaje de $params.from: $message. Tipo: $tipo"

        String response
        if (tipo.toUpperCase() == "TRAN"){
            def dir = message.replace("$tipo ","").toLowerCase()
            def position = googleClient.get(path:"json", query: [address: "$dir, Capital Federal", region:"ar",sensor: "false"]).data
            def barrio = position.results[0].address_components.find {
                "neighborhood" in it.types
            }
            def nombreBarrio = barrio.long_name

            def evento = EventoVial.list().findAll { EventoVial evento -> evento.barrio == nombreBarrio }

            if (evento){
                response = "Se han encontrado cercanas a la dirección. Más detalles: ${evento.descripcion.join(". ")}"
            } else {
                response = "La zona buscada no encuentra demoras"
            }

        } else if (tipo.toUpperCase() == "SRV"){
            def srv = message.replace("$tipo ","")

            def servicio = Servicio.findByDescripcion(srv)
            if (servicio){
                switch (servicio.estado){
                    case Servicio.ESTADO_NORMAL:
                        response = "El servicio $srv se encuentra funcionando normalmente"
                        break
                    case Servicio.ESTADO_DEMORADO:
                        response = "El servicio $srv se encuentra con demoras"
                        break
                    case Servicio.ESTADO_PARO:
                        response = "El servicio $srv se encuentra de paro"
                        break
                }
            } else {
                response = "El servicio solicitado no existe"
            }

        }else {
            response = "TODO OK"
        }


        //render "TODO OK"
        def resp = [
                payload: [
                        success: "true",
                        task: "send",
                        messages: [
                                [to: params.from, message: response]
                        ]
                ]
        ]

        render resp as JSON
    }
}
